public class Demo3 {
    public static void main(String[] args) {
//        int a = 10;
//        long b = 100L;
//        b = a; // int-->long，数据范围由小到大，隐式转换
//        a = (int)b; // long-->int, 数据范围由大到小，需要强转，否则编译失败
//        float f = 3.14F;
//        double d = 5.12;
//        d = f; // float-->double，数据范围由小到大，隐式转换
//        f = (float)d; // double-->float, 数据范围由大到小，需要强转，否则编译失败
//        a = d; // 报错，类型不兼容
//        a = (int)d; // int没有double表示的数据范围大，需要强转，小数点之后全部丢弃
//        byte b1 = 100; // 100默认为int，没有超过byte范围，隐式转换
//        byte b2 = (byte)257; // 257默认为int，超过byte范围，需要显示转换，否则报错
//        boolean flag = true;
//        a = flag; // 编译失败：类型不兼容
//        flag = a; // 编译失败：类型不兼容

        int a = 10;
        long b = 100L;
        b = a; // int --> long, 数据范围由小到大，自动类型转换
        a = (int)b; // long --> int， 数据范围由大到小，需要强转，否则编译失败

        float f = 3.14F;
        double d = 5.12;
        d = f; // float --> double, 数据范围由小到大，自动类型转换(隐式)
        f = (float)d; // long --> int，数据范围由大到小，需要强转，否则编译失败

        //a = d; // 报错，类型不兼容
        a = (int) d; // int没有double表示的数据范围大，需要强转，小数点之后全部丢弃
        byte b1 = 100; // 100默认为int，没有超过byte范围，隐式转换
        byte b2 = (byte)257; // 257默认为int，超过byte范围，需要强制类型转换(显式)
        boolean flag = true;
        //a = flag; // 编译失败，类型不兼容
        //flag = a; // 编译失败，类型不兼容


    }
}
